home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1999 July / Macworld (1999-07).dmg / Shareware World / Info / For Developers / Mops 3.4.sea / Quick Edit ƒ / Subject Glossary / Floating Point < prev    next >
Text File  |  1997-08-20  |  5KB  |  215 lines

  1. (special note:  This description of the Mops floating point environment is
  2. incomplete.  Please refer to the Mops file floating point and the Apple
  3. Numerics Manual for detail complete information.)
  4.  
  5. GENERAL
  6.  
  7. A floating point number (flt) is input by placing a decimal point anywhere in 
  8. the number.  There is no separate stack for floats, they are accessed via 
  9. pointers on the normal stack.
  10.  
  11. All numbers to be input as floats must contain one decimal point.
  12.  
  13. The numeric base may be other than decimal when using floating point.  Floats
  14. will always be interpretted in base 10 regardless of base.  Non-floats (no
  15. decimal point) will be interpretted in the current base.
  16.  
  17. The general form for a float is as follows:
  18.  
  19. Sxxx.yyyEszz   There can be NO blanks between the components of a float.
  20.  
  21. S = optional sign of mantissa (+ or - or blank)
  22. xxx.yyy = required mantissa with required decimal  (must have xxx or yyy or both)
  23. E = optional exponent delimiter (may be e)
  24. s = optional sign of exponent
  25. zz = optional exponent, must be preceded by E
  26.  
  27. Note that local variables and named input parameters to be used for floating point
  28. numbers must have their names preceded by %.
  29.  
  30.  
  31. \   =========== NUMERIC CONVERSION =============
  32.  
  33. FLOAT>    \ ( flt -- n )  Converts the float to an int, rounds.
  34. >FLOAT    \ ( n -- flt )  Converts the int to a float.
  35. FCONV?  { addr len -- flt T  |  -- F }
  36.         \ Converts the passed-in ASCII string to
  37.         \ floating, if possible.  I like this name better
  38.         \ than ATOF which Neon had, but change it back if
  39.         \ you want to.
  40.  
  41.  
  42. \  ========== MEMORY ============
  43.  
  44. FVALUE      flt --  : name  Fp analog of value, can use prefix operators.
  45. FCON       flt --  : name  Fp analog of constant.
  46.  
  47.  
  48.  
  49. \ ========== STACK MANIPULATION ============
  50.  
  51.  
  52. FDUP    flt -- flt flt
  53. FOVER     flt1 flt2 -- flt1 flt2 flt1
  54. F2DUP     flt1 flt2 -- flt1 flt2
  55. FDROP     flt --
  56. F2DROP     flt1 flt2 --
  57.  
  58. \        ========= Dyadic comparisons ==========
  59. Stack frame for all dyadic comparisons: ( flt1 flt2 -- b )
  60. F> 
  61. F< 
  62. F≥ 
  63. F≤ 
  64. F=
  65. F≠
  66.  
  67. \        ========= Monadic comparisons ==========
  68. Stack frame for all monadic comparisons: ( flt -- b )
  69.  
  70. F0= 
  71. F0≠ 
  72. F0≥ 
  73. F0< 
  74. F0≤ 
  75. F0> 
  76.  
  77. \    =============== Arithmetic operators ==============
  78.  
  79. \ ( flt1 flt2 -- flt1<op>flt2 )  Result gets stored in flt1's data.
  80.  
  81. F+
  82. F- 
  83. F*
  84. F/
  85.  
  86. PREFIX OPERATORS   Use for fvalues, local fvariables, named input parameters.
  87.  
  88. ->    flt --  : word    Gazinta.  Stores flt.
  89. ++>    flt --  : word    Adds flt.
  90. -->    flt --  : word    Subtracts flt.
  91. NEG>    --  : word    Negates.
  92.  
  93. *>    flt --  : word    Multiplies by flt.
  94. />    flt --  : word    Divides by flt.
  95. ABS>    --  : word    Changes to absolute value.
  96.  
  97.  
  98. \        ============= Monadic operations ==============
  99.  
  100. \ FNEGATE and FABS simply operate on the sign bit, so we don't need to call 
  101. SANE at all.  The SANE manual actually recommends this.  
  102.  
  103. FNEGATE
  104. FABS
  105. SQRT 
  106.  
  107. ROUND    ( flt1 -- flt2 )    FloatingPoint    floating point
  108.     Rounds the given float to the nearest integer by the 
  109.     rules in effect via SETENV (see below). Of  course we still
  110.     have a float.
  111.     
  112.     Note that default rounding is via ASTM.
  113.     Examples:
  114.  
  115. hex 1000 setenv decimal \ the default anyway
  116.  
  117.     1.50 round 5 f.r
  118.     2.000000>
  119.  
  120.     2.50 round 5 f.r
  121.      2.000000
  122.      
  123.  
  124.  
  125.  
  126. GETENV        \ ( -- env )
  127.  
  128. SETENV        \ ( env -- )  default environment is 1000
  129.  
  130. \     =========== Masks for environment word ===========
  131.  
  132. hex
  133.  
  134. \ Rounding
  135.  
  136. 2000    constant    RoundUp
  137. 4000    constant    RoundDown
  138. 6000    constant    RoundToZero
  139.  
  140. \ Exception flags
  141.  
  142. 0100    constant    Invalid
  143. 0200    constant    Underflow
  144. 0400    constant    Overflow
  145. 0800    constant    Zdivide
  146. 1000    constant    Inexact
  147.  
  148.  
  149.  
  150.  
  151.  
  152. TRUNC    ( flt1 -- flt2 )    FloatingPoint    floating point
  153.     Truncates the fractional portion of the given float. Of course 
  154.     we still  have a float.
  155.  
  156.  
  157.  
  158. \        ===================================
  159. \           FP to/from decimal conversion
  160. \        ===================================
  161.  
  162. E.R  ( flt wid -- )  Prints the floating point number in scientific notation
  163. in a field wid characters wide.
  164.     wide
  165. E.      ( flt -- )  \ same as 26 e.r
  166. F.R  ( flt wid -- )  Prints the floating point number without exponents in a 
  167.     field wid characters wide.
  168.  
  169. \        =================================
  170. \                  Transcendentals
  171. \        =================================
  172.  
  173. LN        \ Natural log 
  174. LOG2        \ Base 2 log 
  175. LN1        \ ln(1+x) 
  176. LOG21        \ log2(1+x).  I don't think LOG21 is a very helpful name (pure
  177.             \  computerese), but I guess we're  stuck with it. 
  178. EXP        \ Base e exponential 
  179. EXP2        \ Base 2 exponential 
  180. EXP1        \ e**x - 1 
  181. EXP21    \ 2**x - 1 
  182. **N    \ ( x n -- x**n )  Integer exponentiation.  This wasn't
  183.         \  in Neon, but might be useful.  Note this operation
  184.         \  ignores the high-order 16 bits of n. 
  185. F**    \ ( x y -- x**y )  General exponentiation - takes 2 floats.
  186.         \  Here I think the Neon name was crazy.  But we've still
  187.         \  got it below for compatibility.
  188.  
  189. \ Trig functions.
  190.  
  191. DEG2RAD    \ ( deg -- rad )  Converts degrees to radians 
  192. RAD2DEG    \ ( rad -- deg )  Converts radians to degrees 
  193.  
  194. The following require radians as input.
  195. SIN
  196. COS
  197. TAN 
  198. ARCTAN
  199. COT        \ ( x -- cot(x) )  Cotangent of x 
  200.  
  201. FRAND    \ floating-pt random number routine 
  202.  
  203. \        ======================================
  204. \             Sundry useful constants and operations
  205. \        ======================================
  206. 1.0 exp        fcon    E
  207. 10.0 ln        fcon    LN(10)
  208. PI
  209. UNDEF    \ Ditto
  210.  
  211. 1/X 
  212. LOG        \ ( x -- log(x) )  Log base 10 of x 
  213. ANTILOG    \ ( x -- antilog(x) )  Antilog ( 10^x ) of x 
  214.  
  215.